/*
 * Hash.h
 *
 *  Created on: Oct 12, 2012
 *      Author: romina
 */

#ifndef HASH_H_
#define HASH_H_

#include <exception>
#include "../Exceptions/RecordNotFoundException.h"
#include "Tabla.h"
#include "Cubo.h"
#include "../ManejadorFuncionesArbol/ManejoDeBloques.h"
#include "../Comunes/Constantes.h"
#include "../Comunes/RecordFrase.h"
#include "../Comunes/Palabra.h"

using namespace std;
using namespace palabra;

class Hash {
	ArchivoDeTexto * file_log;
	Tabla * file_tabla;
	ManejoDeBloques * file_bloques;
	int id_cubo_maximo;
	int calcular_dispersion(int clave);
	void overflow(RecordFrase record, Cubo cubo_overflow);
	void redispersar(Cubo &cubo_i, Cubo &cubo_f);
	void inicializar_buffer(char * buffer);
public:
	Hash();
	void insertar_registro(RecordFrase record);
	RecordFrase obtener_registro(int clave);
	void modificar_registro(RecordFrase record);
	void borrar_registro(int clave);
	void show();
	string toString();
	virtual ~Hash();
};

#endif /* HASH_H_ */
